دوشنبه, 20 مهر 1394 00:00
نظر سنجی در مورد کانال تلگرام و انجمن موبایلی خانه اکسس ایران
با سلام
با توجه به راه اندازی کانال تلگرامی خانه اکسس ایران دوستان می تونند با استفاده از لینک زیر در کانال تلگرام خانه اکسس عضو شده و از اخبار سایت مطلع شوند .
تفاوت کانال با گروه پرسش و پاسخ 200 نفره تلگرامی این است که اطلاع رسانی تنها به صورت یکطرفه و از طریق سایت می باشد .
لذا از دوستانی که نظری در خصوص این کانال دارند که فکر می کنند ما رو در رسیدن هر چه بهتر به اهداف سایت یاری می کند خواهشمندیم که در این مطلب نظراتشون رو عنوان کنند .
عضویت در کانال اطلاع رسانی خانه اکسس ایران
عضویت در گروه تلگرام خانه اکسس ایران با ظرفیت محدود 200 نفر ( پرسش و پاسخ آنلاین موبایلی )
یکشنبه, 10 آذر 1392 00:00
آموزش ساخت فیلتر های پیچیده با استفاده از تابع EasyFilter در اکسس
مبحث فيلتر كردن فرم ها يكي از مهم ترين مباحث در نرم افزار اكسس مي باشد . تاكنون امكانات و ابزار هاي گوناگوني توسط خود مايكروسافت و ساير شركت ها و افراد مختلف براي ساده سازي اين فرآيند طراحي گرديده است .
امكانات خود نرم افزار اكسس براي فيلتر كردن فرم هاي در حال نمايش بسيار قوي مي باشد ولي با دو مشكل عمده همراه مي باشد :
-
اين امكانات به هنگام بستن منو و ريبون ها در برنامه اي كه تحويل كاربرنهايي مي گردد ، غير فعال مي شوند و استفاده از آنها ممكن ولي با مشكلاتي همراه مي باشد .
-
تغيير زبان اين امكانات براي فارسي زبانان تقريبا كاري بسيار مشكل مي باشد .
لذا اكثر كاربران براي ايجاد امكان فيلتر كردن در فرم هاي خود اقدام به كد نويسي نموده كه اين كار نيز به نوبه خود كار پيچيده اي است و براي تمامي كاربران امكان پذير نمي باشد .
اين مشكل با افزايش تعداد فيلدها و امكان پر يا خالي بودن تصادفي آنها به هنگام فيلترينگ و متغير بودن نوع فيلدهاي استفاده شده در فيلتر ، دوچندان شده ، به نحوي كه ساختن فرمهاي فيلتر و جستجو را براي كاربران به امري شدني ولي طاقت فرسا تبديل نموده است .
خانه اكسس ايران بر آن شد تا به اين مشكل براي هميشه خاتمه دهد و ساخت پيچيده ترين فيلتر ها را براي فرم هاي در حال نمايش به پروسه اي بسيار ساده تبديل نمايد .
تابع Mantis_Easy_Filter ، كه از طريق ساخت يك عبارت قابل استفاده در خاصيت filter فرم ها به انجام فيلتر را راحت كرده ، به نحوي طراحي گرديده كه كنترل هاي متني ( TextBox , ComboBox , CheckBox ,MultiValueBox ) روي فرم را ( در صورتي كه نام آنها از قواعد خاصي كه مختص اين تابع است پيروي كرده باشد ) شناسايي كرده و با توجه به مقدار درون آنها كه مي تواند حتي Null هم باشد ، عبارت فيلتر را ساخته و مورد استفاده قرار دهد .
براي استفاده از اين تابع بايستي مراحل ذيل را قدم به قدم براي رسيدن به هدف انجام داد :
-
كنترل هاي فيلتر و جستجو در درون يك فرم اصلي قرار مي گيرد كه اين فرم به اين منبع داده اي متصل نيست و كليه كنترل ها به صورت unbound مي باشند .
-
در درون فرم اصلي بايستي يك Sub Form قرار گيرد كه در اين سابفرم فيلدهاي مورد جستجو قرار مي گيرد . و Sub Form به جدول يا پرسش خاصي متصل مي باشد و كنترل ها درون آن نيز به فيلدها bound شده اند . لازم به ذكر است كه اين Sub Form مي تواند در هر نمايي اعم از Datasheet , Single Form , Continuous Forms باشد .
-
هر يك كنترل هاي روي فرم اصلي را كه قرار است به عنوان شرط فيلتر يا جستجو استفاده شود طبق قاعده زير نام گذاري نماييد . (خاصيت name كنترل ) :
نام كنترل از سه قسمت تشكيل مي شود :قسمت اول (پيشوند ) : يك عبارت سه حرفي است كه نوع فيلد مورد جستجو را تبيين مي كند .اين عبارت سه حرفي بايستي قطعا يكي از موارد ذيل باشد .Str : براي فيلدهاي متنيVal : براي فيلدهاي عدديBol : براي فيلدهاي BooleanMul : براي فيلدهاي multivalueBt1 : براي فيلدهاي بازه اي عددي ( از عدد )Bt2 : براي فيلدهاي بازه اي عددي ( تا عدد )Dt1 : براي فيلدهاي بازه اي تاريخ ( از تاريخ )Dt2 : براي فيلدهاي بازه اي تاريخ ( تا تاريخ )قسمت دوم (نام فيلد ) : نام فيلدي است كه قرار است مورد جستجو قرار گيرد .قسمت سوم (پسوند ) : عبارت ثابت flt مي باشد كه كنترل را براي تابع قابل شناسايي مي كند كه باعث مي شود از مقادير درون اين كنترل در ساخت عبارت فيلتر استفاده شود .لازم به ذكر است كه قسمت اول ، دوم و سوم با استفاده از كاراكتر underline يا همان “_” ، بايستي به هم متصل شوند .به طور مثال اگر ما قصد ايجاد فيلتر بروي يك فيلد با نام ID كه از نوع عددي مي باشد داشته باشيد نام كنترل بايستي دقيقا عبارت “val_id_flt” باشد .در مثال فوق اگر نوع فيلد متني باشد بايستي نام كنترل عبارت “str_id_flt “ باشد .مثال ديگر : در صورتي كه بخواهيد از دو تكست باكس براي تعيين بازه زماني در فيلتر استفاده كنيد و نام فيلد مورد جستجو در جدول مثلا invoice_date و از نوع date& time باشد ، بايستي خاصيت Name يكي از كنترل هاي متني را برابر با “dt1_invoice_date_flt” و خاصيت name دومي برابر با “dt2_invoice_date_flt” قرار دهيد .لازم به ذكر است در صورتي كه فيلد تاريخ شما در جدول از نوع عددي باشد بايستي از پيشوند عبارت bt1 و bt2 به جاي dt1 و dt2 استفاده نماييد .4 – آخرين قدم ساخت دكمه "فيلتر" و دكمه "حذف فيلتر" مي باشد :دكمه فيلتر : يك دكمه با نام فيلتر ايجاد نماييد و دو خط كد زير را در خاصيت on click آن درج كنيد :Me.SubForm_Name.Form.Filter = Easy_filter_all(“SubForm_RrecordSource”)Me. SubForm_Name.Form.FilterOn = Trueلازم به ذكر است كه به جاي عبارت SubForm_Name در كد فوق بايستي نام سابفرم استفاده شده در فرم اصلي درج گردد . ( خاصيت name كنترل subform موجود )همچنين به جاي عبارت SubForm_RrecordSource در كد فوق بايستي نام جدول يا پرسشي جايگزين شود كه سابفرم به آن متصل مي باشد . ( عبارت sql در اينجا قابل پشتيباني نبوده و بايستي تبديل به پرسش شده و سپس ازنام پرسش استفاده شود . )دكمه حذف فيلتر : يك دكمه با نام حذف فيلتر ايجاد نماييد و دو خط كد زير را در خاصيت on click آن درج كنيد :Me. SubForm_Name.Form.FilterOn = FalseR_remove = Easy_remove_filter_all()در پايان ذكر اين نكته ضروري به نظر مي رسد كه پروسه به ظاهر پيچيده فوق تنها شامل چهار خط كد vba و يك نام گذاري مناسب روي فيلدها بوده و به محض يك بار استفاده ، بسيار ساده و كاربردي خواهد بود .همچنين براي اضافه كردن يك ديگر فيلد براي جستجو ، كاربر كافي است كه فيلد مورد نظر را به سابفرم اضافه نموده و كنترل متناظر با آن فيلد را با يك نام گذاري مناسب در فرم اصلي قرار دهد . و بدون كدنويسي جديد يا تغيير كدنويسي هاي موجود به هدف خود برسد .در اين روش با توجه به محدوديت تعداد كاراكتر خاصيت فيلتر كه 1024 كاراكتر مي باشد با يك نامگذاري مناسب ( با توجه به استفاده از پيشوند و پسوند بهتر است نام فيلدها كوتاه تر در نظر گرفته شود . ) روي فيلدها مي توان از 30 الي 40 فيلد براي فيلترينگ همزمان استفاده كرد .لطفا براي درك نحوه استفاده ازاين تابع پس از مطالعه اين مقاله ، فيلم آموزشي تهيه شده را نيز ملاحظه نموده و سپس فايل پيوست را كه به صورت عملي اين روش در آن پياده سازي شده ، دانلود و مرور نماييد .
منتشر شده در
طراحی پرسش ، فیلتر ، جستجو در اکسس